package impl

import (
	"awesomeProject/pkg/utils"
	"encoding/json"
	"log"
)

/**
本地文件路径
*/
const filePath = "/Users/xubin/go/src/awesomeProject/test/file/testfile.txt"

type FileStore struct{}

/**
本地文件获取指定值
*/
func (FileStore) Get(key interface{}) (interface{}, error) {
	m, _err := getMap()
	mm := *m //为什么这里不能直接用*m[key.(string)]
	return mm[key.(string)], _err
}

/**
本地文件写入值
*/
func (FileStore) Set(key interface{}, value interface{}) error {
	m, _ := getMap()
	mm := *m
	mm[key.(string)] = value
	bs, err := json.Marshal(mm)
	if err != nil {
		log.Fatal("文件写入前转化json字符串异常!")
	}
	_err := utils.WriteFile(filePath, bs)
	if _err != nil {
		log.Fatal("写入本地文件异常，key: " + key.(string))
	}
	return _err
}

func (FileStore) Delete(key interface{}) error {
	m, _ := getMap()
	mm := *m
	v := mm[key.(string)]
	if v == nil {
		log.Fatal("待删除key不存在!key: " + key.(string))
	}
	return nil
}

/**
本地文件获取指定值
*/
func getMap() (*map[string]interface{}, error) {
	//判断文件是否存在
	if !utils.FileExists(filePath) {
		log.Fatal("本地文件不存在！filePath:" + filePath)
	}
	f, err := utils.ReadFile(filePath)
	if err != nil {
		log.Fatal("文件读取异常: ", err)
	}
	m := make(map[string]interface{})
	_err := json.Unmarshal([]byte(f), &m)
	if _err != nil {
		log.Fatal("文件内容解析json异常: ", _err)
	}
	return &m, _err
}
